from flask_migrate import Manager, MigrateCommand, Migrate
from info import create_app, db, models

# 通过指定的配置名字创建对应的app
# create_app 就类似于工厂方法---设计思路
from info.models import User

app = create_app('development')

# 集成数据库迁移命令
manager = Manager(app)
# 将 app 与 db 关联
Migrate(app, db)
# 将迁移命令添加到manager中
manager.add_command('db', MigrateCommand)


# 命令行创建后台管理员
# python3 manage.py createsuperuser -n admin -p admin
# 命令需要在当前项目目录下运行
@manager.option('-n', '-name', dest='name')
@manager.option('-p', '-password', dest='password')
def createsuperuser(name, password):
    """创建管理员账户"""
    if not all([name, password]):
        print("参数不足")

    user = User()
    user.mobile = name
    user.nick_name = name
    user.password = password
    user.is_admin = True
    try:
        db.session.add(user)
        db.session.commit()
        print("创建成功")
    except Exception as e:
        print(e)
        db.session.rollback()


if __name__ == '__main__':
    print(app.url_map)
    manager.run()
    # 使用命令行执行,如果要直接运行,在run的脚本文件中的parameters:加runserver
    # 执行的文件是哪一个main_module,就设置哪一个的运行参数
    # 相对路径:会定位当前运行模块为运行环境,然后从根目录来补全路径---比如:log,
    # 运行的module,如果在配置运行参数错误的话,定位的路径会出错
